﻿/*
 * Hiển thị thông tin khách hàng , các địa ốc khách hàng đã đăng ký
 * state: done
 */ 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using DevComponents.DotNetBar;
using System.Data;
using DTO;
using BLL;

namespace GUI.View
{
    public partial class KhachHangControl : UserControl
    {
        private readonly KhachHangBLL khachhangBLL;
      
        public KhachHangControl()
        {
            InitializeComponent();

            khachhangBLL = new KhachHangBLL();
            dateTime_NgayDangKy.Value = DateTime.Now;
            // TODO  can delete it ??
            dataGridDsKhachHang.BackgroundColor = System.Drawing.SystemColors.ButtonHighlight;
        }

        private AppCommands _Commands;
        /// <summary>
        /// Gets or sets the commands associated with the control.
        /// </summary>
        public AppCommands Commands
        {
            get { return _Commands; }
            set
            {
                if (value != _Commands)
                {
                    AppCommands oldValue = _Commands;
                    _Commands = value;
                    OnCommandsChanged(oldValue, value);
                }
            }
        }

        /// <summary>
        /// Called when Commands property has changed.
        /// </summary>
        /// <param name="oldValue">Old property value</param>
        /// <param name="newValue">New property value</param>
        protected virtual void OnCommandsChanged(AppCommands oldValue, AppCommands newValue)
        {
            if (newValue != null)
            {
                btnCancel.Command = newValue.ListKhachHangCommands.Cancel;
            }
            else
            {
                btnCancel.Command = null;

            }
        }
        private void KhachHangControl_Load(object sender, EventArgs e)
        {
            dateTime_NgayDangKy.Value = DateTime.Now;
            loadDataListKhachHangByDate();
            loadcbbtenKH();
        }

        public void loadcbbtenKH()
        {
            cbbTenKH.DataSource = new KhachHangBLL().GetAll().Tables[0];
            cbbTenKH.DisplayMember = "HoTen";
            cbbTenKH.ValueMember = "MaKH";
            cbbTenKH.SelectedItem = null;
        }
        // load dữ liệu vào datagrid theo ngày
        private void loadDataListKhachHangByDate()
        {
            dataGridDsKhachHang.DataSource = khachhangBLL.GetByDate(dateTime_NgayDangKy.Value).Tables[0];
            dataGridDsKhachHang.Refresh();
        }
        // sư kiện thay đổi ngày
      
        #region Kiểm tra điều kiện vào
        // CMND chỉ là số
        private void txtCMND_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }
        // điều kiện nhập họ tên
        private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsLetter(e.KeyChar) && (e.KeyChar != 8 || e.KeyChar != 13))
                e.Handled = true;
            if (e.KeyChar == 8)
                e.Handled = false;
            if (e.KeyChar == (char)Keys.Space)
                e.Handled = false;
            if (e.KeyChar == 39)
                e.Handled = false;
        }
        // TODO Viết ra thành file cs riêng
        //Kiểm tra email hợp lệ
        public static bool isValidEmail(string inputEmail)
        {
            string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                  @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                  @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
            Regex re = new Regex(strRegex);
            if (re.IsMatch(inputEmail))
                return (true);
            else
                return (false);
        }
        #endregion

        #region EVENT
        private void dateTime_NgayDangKy_ValueChanged(object sender, EventArgs e)
        {
            loadDataListKhachHangByDate();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (txtCMND.Text.Equals("") || txtSoDT.Text.Equals("") || cbbTenKH.Text.Equals("") || txtDiaChi.Text.Equals(""))
            {
                ToastNotification.Show(this, "Vui lòng nhập đầy đủ thông tin", eToastPosition.MiddleCenter);
                return;
            }
            if (txtCMND.Text.Length < 6)
            {
                ToastNotification.Show(this, "Chứng minh nhân dân không hợp lệ.", eToastPosition.MiddleCenter);
                return;
            }
            if (txtSoDT.Text.Length < 8)
            {
                ToastNotification.Show(this, "Số điện thoại không hợp lệ.", eToastPosition.MiddleCenter);
                return;
            }
            if (!isValidEmail(txtEmail.Text.Trim()))
                MessageBox.Show("Định dạng Email không chính xác", "Thông Báo", MessageBoxButtons.OK);
            else
            {
                KhachHangDTO kh;
                int n = khachhangBLL.GetByCMND(txtCMND.Text.Trim()).Tables[0].Rows.Count;
                if (n > 0)
                {
                    //hien thong bao cmnd da ton tai bam ok de tiep tuc, tu dong cap nhat lai thong tin khach hang
                    //tru di makh va cmnd khach hang
                    DialogResult dialogResult = MessageBox.Show("CMND đã tồn tại, Chọn Yes để tiếp tục?", "Chỉnh sửa thông tin khách hàng", MessageBoxButtons.YesNo);
                    if (dialogResult == DialogResult.Yes)
                    {
                        kh = new KhachHangDTO(cbbTenKH.Text.Trim(), txtSoDT.Text.Trim(), txtEmail.Text.Trim(), txtDiaChi.Text.Trim(), txtCMND.Text.Trim(), DateTime.Today);
                        if (khachhangBLL.updateKhachHangDaTonTaiCMND(kh)) // HACK (khachhangBLL.updateKhachHangDaTonTaiCMND(kh))
                        {
                            ToastNotification.Show(this, "Thành Công", eToastPosition.MiddleCenter);
                            loadDataListKhachHangByDate();
                        }
                        else
                            ToastNotification.Show(this, "Thất Bại", eToastPosition.MiddleCenter);
                    }
                    else if (dialogResult == DialogResult.No)
                    {
                        MessageBox.Show("Bạn đã hủy việc thêm khách hàng");
                    }
                }
                //neu khach hang chua ton tai thi them day du thong tin khach hang vao
                else
                {
                    kh = new KhachHangDTO(cbbTenKH.Text, txtSoDT.Text.Trim(), txtEmail.Text.Trim(), txtDiaChi.Text.Trim(), txtCMND.Text.Trim(), DateTime.Today);
                    if (khachhangBLL.Add(kh) > 0)
                    {
                        ToastNotification.Show(this, "Successful", eToastPosition.MiddleCenter);
                        loadDataListKhachHangByDate();
                    }

                    else
                        ToastNotification.Show(this, "Failed", eToastPosition.MiddleCenter);
                }
                btnReFresh_Click(sender, e);
            }
        }
        private void btnReFresh_Click(object sender, EventArgs e)
        {
            txtCMND.Text = "";
            txtCMND.Refresh();
            txtDiaChi.Text = "";
            cbbTenKH.Text = "";
            txtMaKhachHang.Text = "###";
            txtSoDT.Text = "";
            txtEmail.Text = "";
            btnAdd.Enabled = true;
            btnEdit.Enabled = false;
            dataGridDsKhachHang.Refresh();
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (txtCMND.Text.Equals("") || txtSoDT.Text.Equals("") || cbbTenKH.Text.Equals("") || txtDiaChi.Text.Equals(""))
            {
                ToastNotification.Show(this, "Vui lòng nhập đầy đủ thông tin", eToastPosition.MiddleCenter);
                return;
            }
            if (txtCMND.Text.Length < 6)
            {
                ToastNotification.Show(this, "Chứng minh nhân dân không hợp lệ.", eToastPosition.MiddleCenter);
                return;
            }
            if (txtSoDT.Text.Length < 8)
            {
                ToastNotification.Show(this, "So DT không hợp lệ.", eToastPosition.MiddleCenter);
                return;
            }
            if (!isValidEmail(txtEmail.Text.Trim()))
                MessageBox.Show("Định dạng Email không chính xác", "Thông Báo", MessageBoxButtons.OK);
            else
            {
                KhachHangDTO kh = new KhachHangDTO(Int32.Parse(txtMaKhachHang.Text.Trim()), cbbTenKH.Text.Trim(), txtSoDT.Text.Trim(), txtEmail.Text.Trim(), txtDiaChi.Text.Trim(), txtCMND.Text.Trim());
                if (khachhangBLL.Update(kh))
                {
                    ToastNotification.Show(this, "Thành Công", eToastPosition.MiddleCenter);
                    loadDataListKhachHangByDate();
                }
                else
                    ToastNotification.Show(this, "Thất Bại", eToastPosition.MiddleCenter);

                btnReFresh_Click(sender, e);
            }
        }     

        private void dataGridDsKhachHang_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int i = e.RowIndex; ;
            try
            {
                if (i > -1 && i < dataGridDsKhachHang.RowCount)
                {
                    txtMaKhachHang.Text = dataGridDsKhachHang.Rows[i].Cells["MaKH"].Value.ToString().Trim();
                    cbbTenKH.Text = dataGridDsKhachHang.Rows[i].Cells["HoTen"].Value.ToString().Trim();
                    txtSoDT.Text = dataGridDsKhachHang.Rows[i].Cells["SoDT"].Value.ToString().Trim();
                    txtEmail.Text = dataGridDsKhachHang.Rows[i].Cells["Email"].Value.ToString().Trim();
                    txtDiaChi.Text = dataGridDsKhachHang.Rows[i].Cells["DiaChi"].Value.ToString().Trim();
                    txtCMND.Text = dataGridDsKhachHang.Rows[i].Cells["CMND"].Value.ToString().Trim();
                    btnAdd.Enabled = false;
                    btnEdit.Enabled = true;
                }
            }
            catch (Exception ie)
            {
                MessageBox.Show("Loi roi");
                Console.WriteLine(ie.Message);
            }
        }
        #endregion

        private void cbbTenKH_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                KhachHangBLL khBLL = new KhachHangBLL();
                DataTable dt = khBLL.GetByID((int)(cbbTenKH.SelectedValue)).Tables[0];
                DataRow dr = dt.Rows[0];
                txtMaKhachHang.Text = dr.ItemArray[0].ToString().Trim();
                txtSoDT.Text = dr.ItemArray[2].ToString().Trim();
                txtEmail.Text = dr.ItemArray[3].ToString().Trim();
                txtDiaChi.Text = dr.ItemArray[4].ToString().Trim();
                txtCMND.Text = dr.ItemArray[5].ToString().Trim();
                dateTime_NgayDangKy.Value = (DateTime)dr.ItemArray[6];
                btnAdd.Enabled = false;
                btnEdit.Enabled = true;
            }
            catch
            { };
        }
    }
}
